﻿//void Pop(QP* Q) {
//	if (!Q->head) {
//		return;
//	}
//	if (Q->head == Q->tail) {
//		free(Q->head);
//		QueueInit(Q);
//		return;
//	}
//	Node* node = Q->head;
//	Node* last = node;
//	while (node->next) {
//		last = node;
//		node = node->next;
//	}
//	free(node);
//	Q->tail = last;
//	Q->tail->next = 0;
//}

//bool JudgeTree(struct TreeNode* root, int x) {
//    if (!root) {
//        return true;
//    }
//    if (root->val != x) {
//        return false;
//    }
//    return JudgeTree(root->left, x) && JudgeTree(root->right, x);
//}
//
//bool isUnivalTree(struct TreeNode* root) {
//    if (!root) {
//        return true;
//    }
//    return JudgeTree(root, root->val);
//}

//#define ADD(x, y) x + y;
////int a = ADD(1, 2) * 5;转换后a = 1 + 2 * 5 = 11,不符合我们的要求
//#define ADD(x, y) (x + y)
////int a = ADD(1 | 2, 1 & 2); 转换后a = (1 | 2 + 1 & 2),不符合我们的要求
//#define ADD(x, y) (x) + (y)
////int a = ADD(1, 2) * 5;转换后a = 1 + 2 * 5 = 11,不符合我们的要求
//#define ADD(x, y) ((x) + (y));
////写法正确

//翻转二叉树
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
//truct TreeNode* invertTree(struct TreeNode* root) {
//    if (!root) {
//        return 0;
//    }
//    struct TreeNode* right = invertTree(root->left);
//    struct TreeNode* left = invertTree(root->right);
//    root->left = left;
//    root->right = right;
//    return root;
//}

//相同的树
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
//bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
//    if (!p && !q) {
//        return true;
//    }
//    if ((!p && q) || (p && !q)) {
//        return false;
//    }
//    if (p->val != q->val) {
//        return false;
//    }
//    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
//}